﻿Namespace Load

    ''' <summary>
    ''' 列エイリアスファクトリー（ルートテーブル）
    ''' </summary>
    ''' <remarks></remarks>
    Friend Class RootTableColumnAliasFactory

        ''' <summary>
        ''' テーブルエイリアスから列エイリアスリストを作成します
        ''' </summary>
        ''' <param name="als">テーブルエイリアス</param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Function Create(als As TableAlias) As List(Of ColumnAlias)
            Dim lst As New List(Of ColumnAlias)
            Dim i As Integer = 0

            For Each item As ColumnAttribute In (From el In als.Table.Columns Where el.IsLoadable)
                lst.Add(Me.CreateColumnAlias(als, item, i))
                i += 1
            Next

            Return lst
        End Function

        ''' <summary>
        ''' 列エイリアスを作成します
        ''' </summary>
        ''' <param name="als">テーブルエイリアス</param>
        ''' <param name="col">列属性</param>
        ''' <param name="index">テーブルエイリアス内での一意のインデックス番号</param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Protected Function CreateColumnAlias(als As TableAlias, col As ColumnAttribute, index As Integer) As ColumnAlias
            Dim c As New ColumnAlias

            c.TableAlias = als
            c.Column = col
            c.Index = index
            c.BaseColumnAlias = Nothing

            Return c
        End Function

    End Class

End Namespace

